import {
  ArrowIcon,
  DiamondIcon,
  EllipseIcon,
  EraserIcon,
  FreedrawIcon,
  ImageIcon,
  LineIcon,
  RectangleIcon,
  SelectionIcon,
  StickyNoteIcon,
  TextIcon
} from '/imports/components/icons'
import { KEYS } from './keys'

export const SHAPES = [
  {
    icon: SelectionIcon,
    value: 'selection',
    key: KEYS.V,
    numericKey: KEYS['1'],
    fillable: true
  },
  {
    icon: StickyNoteIcon,
    value: 'stickynote',
    key: KEYS.S,
    numericKey: KEYS['2'],
    fillable: true
  },
  {
    icon: RectangleIcon,
    value: 'rectangle',
    key: KEYS.R,
    numericKey: KEYS['3'],
    fillable: true
  },
  {
    icon: DiamondIcon,
    value: 'diamond',
    key: KEYS.D,
    numericKey: KEYS['4'],
    fillable: true
  },
  {
    icon: EllipseIcon,
    value: 'ellipse',
    key: KEYS.O,
    numericKey: KEYS['5'],
    fillable: true
  },
  {
    icon: ArrowIcon,
    value: 'arrow',
    key: KEYS.A,
    numericKey: KEYS['6'],
    fillable: true
  },
  {
    icon: LineIcon,
    value: 'line',
    key: KEYS.L,
    numericKey: KEYS['7'],
    fillable: true
  },
  {
    icon: FreedrawIcon,
    value: 'freedraw',
    key: [KEYS.P, KEYS.X],
    numericKey: KEYS['8'],
    fillable: false
  },
  {
    icon: TextIcon,
    value: 'text',
    key: KEYS.T,
    numericKey: KEYS['9'],
    fillable: false
  },
  {
    icon: ImageIcon,
    value: 'image',
    key: null,
    numericKey: KEYS['0'],
    fillable: false
  },
  {
    icon: EraserIcon,
    value: 'eraser',
    key: KEYS.E,
    numericKey: KEYS['HYPHEN'],
    fillable: false
  }
] as const

export const findShapeByKey = (key: string) => {
  const shape = SHAPES.find((shape, _idx) => {
    return (
      (shape.numericKey != null && key === shape.numericKey.toString()) ||
      (shape.key &&
        (typeof shape.key === 'string'
          ? shape.key === key
          : (shape.key as readonly string[]).includes(key)))
    )
  })
  return shape?.value || null
}
